package cn.doitedu.day06

import org.apache.spark.rdd.RDD
import org.apache.spark.{SparkConf, SparkContext}

/**
 * 不使用spark的累加器功能，自己定义一个普通的变量(实现不了)
 */
object T02_AccumulatorDemo2 {

  def main(args: Array[String]): Unit = {

    val conf = new SparkConf().setAppName(this.getClass.getSimpleName)
      .setMaster("local[4]")
    val sc = new SparkContext(conf)

    val rdd1: RDD[Int] = sc.parallelize(List(1, 2, 3, 4, 5, 6, 7, 8, 9, 10), 2)

    //在Driver端定义的
    var count = 0

    val rdd2: RDD[Int] = rdd1.map(n => {
      if(n % 2 == 0) {
        count += 1 //闭包，将Driver的数据序列化后发生到Executor，Executor中使用的是Driver端的拷贝
      }
      n * 10
    })

    rdd2.saveAsTextFile("out/out02")

    println("偶数的数量：" + count) //打印的是Driver端的count

  }

}
